package com.zenchn.utils;

/**
 * 经纬度 计算距离 ，计算半径范围
 *
 * @author dingxinfa
 * @date 2018-08-15
 **/
public class LatLonUtil {
    private static final double EARTH_RADIUS = 6378137;  
    private static final double RAD = Math.PI / 180.0;  
  
    /** 
     * @param raidus 单位米 
     * return minLat,minLng,maxLat,maxLng 
     */  
    public static double[] getAround(double lat,double lng,int raidus){  
          
        Double degree = (24901*1609)/360.0;  
          
        Double dpmLat = 1/degree;  
        Double radiusLat = dpmLat*raidus;  
        Double minLat = lat - radiusLat;  
        Double maxLat = lat + radiusLat;  
          
        Double mpdLng = degree*Math.cos(lat * RAD);  
        Double dpmLng = 1 / mpdLng;  
        Double radiusLng = dpmLng*raidus;  
        Double minLng = lng - radiusLng;  
        Double maxLng = lng + radiusLng;  
        return new double[]{minLat,minLng,maxLat,maxLng};  
    }  
      
    /** 
     * 根据两点间经纬度坐标（double值），计算两点间距离，单位为米 
     * @param lng1 
     * @param lat1 
     * @param lng2 
     * @param lat2 
     * @return 
     */  
    public static double getDistance(double lng1, double lat1, double lng2, double lat2) {
       double radLat1 = lat1*RAD;  
       double radLat2 = lat2*RAD;  
       double a = radLat1 - radLat2;  
       double b = (lng1 - lng2)*RAD;  
       double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +  
        Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));  
       s = s * EARTH_RADIUS;  
       s = Math.round(s * 10000) / 10000;  
       return s;  
    }  

}
